rust关于生命周期: Mutex Fn
·
Table of Contents
遇到的问题
let mut b = SslConnector::builder(SslMethod::tls_client()).map_err(|e|e.to_string())?;
b.set_verify(SslVerifyMode::NONE);
if let Some(file) = &config.sshkeylogfile {
let file = OpenOptions::new()
.create(true)
.append(true)
.open(file)
.map_err(|e|e.to_string())?;
let file = Mutex::new(file);
// 重点这里:
// 1. 即需要move将file的生命周期延长
// 2. 又需要file.lock().unwrap() 这样使用捕获的变量, 这样才能多次调用
// 可以理解为 struct Fn { file: TFile }, Fn 结构通过move保存了值类型file, 同时使用Mutex保证了内部可变性???
b.set_keylog_callback(move |_ssl, str| {
// let file = file; // 这样调用一次就消耗了file,不能多次调用这个回调
let mut file = file.lock().unwrap();
let _ = file.write_all(str.as_bytes());
let _ = file.write_all(b"\n");
});
}